package cn.tedu.csmall520.stock.webapi.quartz;

import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

//QuartzConfig类来绑定Job和Trigger触发关系的
//这个触发关系实际上会有Spring容器中Schedule对象调度
@Configuration
public class QuartzConfig {

    //利用@Bean注解,将JobDetail对象保存到Spring容器中
    @Bean
    public JobDetail showTime(){
        //JobDetail对象中配置要运行的Job类的信息
        //JobBuilder.newJob发给发就是创建JobDetail对象的方法,参数关联要运行的Job实现类
        return JobBuilder.newJob(QuartzJob.class)
                //需要给当前任务起名,不要和其他任务名称重复
                .withIdentity("showTime")
                //默认情况下,JobDetail对象生成后,如果没有触发器绑定,就有可能会被自动删除
                //设置了storeDurably方法后,JobDetail生成后即使没有被绑定,也不会被GC回收删除
                .storeDurably()
                .build();
    }


    //利用@Bean注解,将Trigger对象保存到Spring容器中,用于设置Job的触发时间
    @Bean
    public Trigger showTimeTrigger(){
        //声明cron表达式,定义Job运行的触发时间
        CronScheduleBuilder cron = CronScheduleBuilder.cronSchedule("0 45 16 3 3 ?");
        return TriggerBuilder.newTrigger()
                //设置要触发的JobDetail对象
                        .forJob(showTime())
                        //当前触发器也要起名字,不得重复
                        .withIdentity("showTimeTrigger")
                        //绑定cron表达式
                        .withSchedule(cron)
                        .build();
    }


}
